/**
 * 电话号码的字母全排列
 */

let map = {
    "2": "abc",
    "3": "def",
    "4": "ghi",
    "5": 'jkl',
    '6': 'mno',
    '7': 'pqrs',
    '8': 'tuv',
    '9': 'wxyz'
}

// BFS 广度遍历， for循环嵌套
function lettersCombations(str) {
    let res = []
    if(str.length === 0) return [];
    if(str[0]  && str[0] !== '1') res.push(...map[str[0]])


    // 待查询字符的数字大于1,下标为1， 因为， 0已经被压入到res数组当中了
    // 1 先找到对应的字母
    let index=1, curs, temp = []
    while (index < str.length) {
         curs = map[str[index]]
        if(curs){
            for(let i=0; i<curs.length; i++){
                for(let j = 0; j<res.length; j++) {
                    temp.push(curs[i]+res[j])
                }
            }
            res = temp
        }else {
            // 如果， str被while完了
            break;
        }
        index ++
    }
    return res;
}

console.log(lettersCombations('23'));
